package _01_OOP;
/**
 * JVM 四大特性 :
 * 跨平台  自动垃圾回收机制  多线程  面向对象
 * 
 * 面向对象和面向过程
 * 面向对象 :
 * 简单来说,我要把一件事交给你做,你怎么做我不管,我只在乎你有没有做到
 * 我想要的结果
 * 比如,课设老师布置课设,老师只会给我们需求,说明这个功能谁做,需要完成什么功能
 * 并不会给我们说出实现功能的步骤和思路,这就是面向对象
 * 而我们具体编写功能实现的时候,还是面向过程(第一步干什么,第二步...)而这种设计 是面向
 * 对象包括验收的时候一般就验收结果,只要结果正确,步骤一定差不了
 * 
 * 这个时候,老师是调用处,每一个完成课设的同学  是对象
 * 
 * 面向过程 :
 * 
 * 我们完成一件事的步骤,划分一些方法,一次调用这些方法就能完成
 * 
 * 面向对象的优点 :
 * 随着社会科技的发展,由之前一个人几个人完成的软件,已成为历史
 * 现在动辄就是大型的应用系统,涉及到各种业务逻辑需求,几个人肯定搞不定
 * 如果单纯是面向过程这种扁平化管理,排除错误或者进行其他开发工作的时候
 * 很耗费人力物力
 * 如果是面向对象的思路,先把这个方法按照某些标准划分给不同的模块,分层
 * 管理,这样就能很清晰看到我们的工作,能够快速完成
 * 
 * 1.维护简单
 * 2.可扩展性
 * 3.代码复用
 * @author lenovo
 * @Date 2020年7月6日
 * @Time 下午6:40:53
 * 
 * 对象 : 类是对象的抽象 , 对象是类的实例化
 * 代码角度 : new 的实例化某个类的实体,封装特有的数据
 * 数据角度 : 封装数据和逻辑的一种方式
 * 一切皆对象
 * 设计角度 : 从一个实际的实体抽象某些属性的一种表示形式
 * 
 * 类 :
 * 概念 : 是我们在思想上对某个东西/某一类东西的一个唯一性标识
 * 是我们大脑中对客观事物描述的一个标准,一个模板
 * 
 * 我们在抽离某个概念,就建立相关事物的类,一定是通过属性来形成这个类/概念
 * 然后通过不同的属性值形成了实体,就是具体的对象
 * 
 * 从类到实体的过程,就是对某个类的熟悉赋值的过程
 * 
 * 属性分两种 :
 * 		静态属性 : 类的行为或功能
 * 		成员属性 : 类对象的行为和功能
 * 
 * 我们把不同的属性描述,划分为不同的类
 * 把相同的属性不同的值定义为成员属性
 * 把相同的属性相同的值定义为静态属性
 * 
 * 访问一个类静态属性的时候,会被加载到静态区内存
 * 
 * 实例化 :
 * 1.加载到静态区
 * 2.调用构造方法(找内存开辟栈帧),堆内存开辟内存空间
 * 3.把对应的类中的成员属性复制到堆内存空间中
 * 4.执行构造方法,对堆内存成员属性进行初始化
 * 5.把堆内存的地址,赋值给栈内存变量
 */
public class OOP_01 {
	public static void main(String[] args) {
		OOP_01.m1();
		// 成员方法要用对象.方法调用
//		OOP_01.m2();
		OOP_01 o = new OOP_01();
		o.m2();

		bfm b = new bfm();
		b.a = 190;
		b.b = 19;
		b.c = 123456789;

		bfm b1 = new bfm();
		b1.a = 190;
		b1.b = 19;
		b1.c = 123456789;

		System.out.println(b.a);
		System.out.println(b1.a);
		// getClass() 方法返回class类型的对象
		System.out.println(b1.getClass() == b.getClass());
		// b 的类的类型和 b1 的类的类型是同一个
		b.sex = '男';
		System.out.println(b.sex);
		System.out.println(b1.sex);
		// 两个类肯定不相等
		System.out.println(b == b1);

	}

	public static void m1() {
		// TODO Auto-generated method stub
		System.out.println("测试静态");
	}

	public void m2() {
		System.out.println("测试成员");
	}
}

class bfm {
	static char sex = '女';
	// 身高
	int a = 10;
	// 年龄
	int b;
	// 财富
	int c;
	int[] arr = { 1, 2 };
}